package com.devilvan.betrice.sinofinance.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.devilvan.betrice.common.BetriceResultCode;
import com.devilvan.betrice.common.BetriceResultVo;
import com.devilvan.betrice.sinofinance.dto.SinaUsstockQuotesDto;
import com.devilvan.betrice.sinofinance.po.SinaUsstockQuotesPo;
import com.devilvan.betrice.sinofinance.service.SinaUsstockQuotesService;
import com.devilvan.betrice.sinofinance.mapper.SinaUsstockQuotesMapper;
import com.devilvan.betrice.sinofinance.repository.SinaUsstockQuotesRepository;
import com.devilvan.betrice.sinofinance.vo.SinaUsstockQuotesVo;
import com.devilvan.betrice.util.UCopy;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * @author Evad.Wu
 * @Description 新浪财经-美股实时行情信息表 业务逻辑类
 * @date 2023-03-19
 */
@Service
public class SinaUsstockQuotesServiceImpl extends ServiceImpl<SinaUsstockQuotesMapper, SinaUsstockQuotesPo> implements SinaUsstockQuotesService {

    @Resource(name = "sinaUsstockQuotesRepository")
    private SinaUsstockQuotesRepository sinaUsstockQuotesRepository;

    @Override
    public SinaUsstockQuotesPo saveUpdate(SinaUsstockQuotesDto sinaUsstockQuotesDto) {
        SinaUsstockQuotesPo sinaUsstockQuotesPo = new SinaUsstockQuotesPo();
        UCopy.fullCopy(sinaUsstockQuotesDto, sinaUsstockQuotesPo);
        return sinaUsstockQuotesRepository.saveAndFlush(sinaUsstockQuotesPo);
    }

    @Override
    public List<SinaUsstockQuotesPo> saveUpdateBatch(List<SinaUsstockQuotesDto> list) {
        List<SinaUsstockQuotesPo> sinaUsstockQuotesPoList = UCopy.fullCopyCollections(list, SinaUsstockQuotesPo.class);
        return sinaUsstockQuotesRepository.saveAllAndFlush(sinaUsstockQuotesPoList);
    }

    @Override
    public synchronized BetriceResultVo<SinaUsstockQuotesPo> doSinaUsstockQuotesRequest(String request) {
        BetriceResultVo<SinaUsstockQuotesPo> betriceResultVo = new BetriceResultVo<>();
        String PREFIX = "](";
        int endIndex = request.indexOf(PREFIX) + PREFIX.length();
        String content = request.substring(endIndex, request.length() - 2);
        try {
            List<SinaUsstockQuotesVo> sinaUsstockQuotesVoList = Optional.ofNullable(JSONObject.parseObject(content))
                    .map(jsonObject -> jsonObject.getJSONArray("data"))
                    .map(jsonArray -> jsonArray.toJavaList(SinaUsstockQuotesVo.class))
                    .orElseGet(ArrayList::new);
            List<SinaUsstockQuotesPo> sinaUsstockQuotesPoList = UCopy.fullCopyCollections(sinaUsstockQuotesVoList, SinaUsstockQuotesPo.class);
            sinaUsstockQuotesRepository.saveAllAndFlush(sinaUsstockQuotesPoList);
            betriceResultVo.result(BetriceResultCode.SUCCESS_200, "操作成功！");
            betriceResultVo.setHandleCount(sinaUsstockQuotesPoList.size());
        } catch (Exception e) {
            e.printStackTrace();
            betriceResultVo.result(BetriceResultCode.FAILED_500, "操作失败！");
        }
        return betriceResultVo;
    }
}
